/**
 * 多语言混入
 * 为Vue组件提供翻译功能的便捷方法
 */
import { mapGetters, mapState } from 'vuex'
import { languageManager } from '@/utils/language.js'

export const languageMixin = {
    computed: {
        ...mapState('user', ['languagePack', 'currentLanguage']),

        // 语言包翻译getter
        translate() {
            return (languageKey, fallback = '', params = {}) => {
                return languageManager.translate(languageKey, fallback, params)
            }
        },

        // 添加响应式的语言key，当语言切换时会触发组件重新渲染
        currentLang() {
            return this.currentLanguage || languageManager.getCurrentLanguage()
        }
    },

    methods: {
        /**
         * 翻译方法
         * @param {string} languageKey - 语言key
         * @param {string} fallback - 备用文本
         * @param {Object} params - 插值参数
         * @returns {string} 翻译后的文本
         */
        $t(languageKey, fallback = '', params = {}) {
            return languageManager.translate(languageKey, fallback, params)
        },

        /**
         * 翻译物品名称
         * @param {Object} item - 物品对象
         * @param {string} nameField - 名称字段，默认为'name'
         * @returns {string} 翻译后的名称
         */
        translateItemName(item, nameField = 'name') {
            if (!item) return this.$t('common.unknown', 'Unknown')

            if (item.language_key) {
                const fallbackName = item[nameField] || item.seed_name || item.material_name || item.item_name || this.$t('common.unknown', 'Unknown')
                return this.$t(item.language_key, fallbackName)
            }

            return item[nameField] || item.seed_name || item.material_name || item.item_name || this.$t('common.unknown', 'Unknown')
        },

        /**
         * 批量翻译物品列表
         * @param {Array} items - 物品列表
         * @param {string} nameField - 要翻译的名称字段
         * @returns {Array} 翻译后的物品列表
         */
        translateItemList(items, nameField = 'name') {
            if (!Array.isArray(items)) return items

            return items.map(item => ({
                ...item,
                translatedName: this.translateItemName(item, nameField)
            }))
        },

        /**
         * 设置应用语言
         * @param {string} languageCode - 语言代码
         */
        setLanguage(languageCode) {
            languageManager.setCurrentLanguage(languageCode)
        },

        /**
         * 获取当前语言
         * @returns {string}
         */
        getCurrentLanguage() {
            return languageManager.getCurrentLanguage()
        },

        /**
         * 获取支持的语言列表
         * @returns {Array}
         */
        getSupportedLanguages() {
            return languageManager.getSupportedLanguages()
        },

        /**
         * 检查是否支持指定语言
         * @param {string} languageCode
         * @returns {boolean}
         */
        isLanguageSupported(languageCode) {
            return languageManager.isLanguageSupported(languageCode)
        }
    },

    /**
     * 组件创建时初始化语言
     */
    created() {
        // 确保语言管理器已初始化当前语言
        const savedLanguage = uni.getStorageSync('currentLanguage')
        if (savedLanguage && languageManager.isLanguageSupported(savedLanguage)) {
            languageManager.setCurrentLanguage(savedLanguage, true) // 跳过事件，避免循环
        } else {
            // 根据系统语言设置默认语言
            const currentLang = languageManager.getCurrentLanguage()
            this.$store.commit('user/SET_CURRENT_LANGUAGE', currentLang)
        }
    }
}

export default languageMixin